package com.framework.rocketmq.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 描述：
 * rocket配置
 * @author xianggj
 * @Date 2021/10/13 17:10
 **/
@Data
@Configuration
@ConfigurationProperties(prefix = "rocketmq")
public class RocketMQConfig {

    private String producerGroup;

    private String nameSrvAddr;

    private String consumerGroup;

    /**
     * 消息发送超时时间
     */
    private Integer  sendMsgTimeout;

    /**
     *消息最大长度
     */
    private Integer  maxMessageSize;

    /**
     * 消息发送失败重试次数
     */
    private Integer  retryTimesWhenSendFailed;

    /**
     * 客户端实例名称，客户端创建的多个 Producer、
     * Consumer 实际是共用一个内部实例（这个实例包含
     * 网络连接、线程资源等）
     *
     * <p>
     *     如果不填 不会指定这个值 默认为DEFAULT
     *     如果填写最好使用唯一值 如UUID
     * 作用 ：
     * 当多个生产者消费者对象使用同一个InstanceName 时，那么他们使用的是同一个MQClientInstance ，
     * 这样一些异步线程，定时拉取topic，心跳，nettyclient等线程都是一份，可以节省资源。
     *
     * 用于负载均衡
     * 消费者在负载均衡时使用InstanceName 做区分。如果在同一ip下，两个服务中的消费者使用的同样的配置。
     * InstanceName 一样。
     *
     * 比如 两个都叫 10.2.116.119@bbbbb 。这样负载均衡会认为是同一个消费者。
     * 比如他把4个MessageQueue 分个10.2.116.119@bbbbb 。
     * 那么两个10.2.116.119@bbbbb 的实例都可以消费这4个MessageQueue 。
     *</p>
     *
     */
    private String instanceName;

}
